package com.dily.study.demo.test;

/**
 * Date: 2022-03-22 星期二
 * Time: 15:56
 * Author: Dily_Su
 * Remark:
 */
public class BitCalculation {

    /**
     * int 长度32位
     * 位运算 33 == 1
     * mod 2
     */
    private static void bit32() {
        // 负数
        System.out.println(-4 >>> 32);// -4 本身
        System.out.println(-4 >> 1);  // -2 右移
        System.out.println(-4 >> 33); // -2 右移
        System.out.println(-4 << 1);  // -8 左移
        System.out.println(-4 << 33); // -8 左移
        // 正数
        System.out.println(4 >>> 32); // 4 本身
        System.out.println(4 >> 1);   // 2 右移
        System.out.println(4 >> 33);  // 2 右移
        System.out.println(4 << 1);   // 8 左移
        System.out.println(4 << 33);  // 8 左移
    }

    /**
     * long 长度64位
     * 位运算 65 == 1
     * mod 2
     */
    private static void bit64() {
        long x = 4;
        // 负数
        System.out.println(-x >>> 64);// -4 本身
        System.out.println(-x >> 1);  // -2 右移
        System.out.println(-x >> 65); // -2 右移
        System.out.println(-x << 1);  // -8 左移
        System.out.println(-x << 65); // -8 左移
        // 正数
        System.out.println(x >>> 64); // 4 本身
        System.out.println(x >> 1);   // 2 右移
        System.out.println(x >> 65);  // 2 右移
        System.out.println(x << 1);   // 8 左移
        System.out.println(x << 65);  // 8 左移
    }

    /**
     * 逻辑运算
     */
    private static void logic() {
        boolean a = true;
        boolean b = true;
        System.out.println((a = (1 == 2)) && (b = (1 == 2))); // 短路
        System.out.println(a); // a 变为 false 引发短路
        System.out.println(b); // 短路引发 b 不改变

        boolean e = false;
        boolean f = false;
        boolean g = (e = (1 == 1)) || (f = (1 == 1)); // 短路
        System.out.println(e); // e 变为 true 引发短路
        System.out.println(f); // 短路引发 f 值不改变
    }

    public static void main(String[] args) {
        logic();
    }
}
